home *** CD-ROM | disk | FTP | other *** search
/ MacWorld 1999 April / Macworld (1999-04).dmg / Shareware World / Info / 1984 OLM Issue 10 / 1984 OLM Issue 10.rsrc / TEXT_148.txt < prev    next >
Text File  |  1999-02-16  |  12KB  |  200 lines

  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7.  
  8.  
  9.  
  10.  
  11.  
  12.  
  13.  
  14.  
  15. AppleScript for Mac OS 8.5
  16. Part One - Steve Harris
  17. Back in the dawn of time (issues 2 to 6 of 1984-Online, anyway) I wrote a series of features on AppleScript and how to get to grips with it. Seeing that Apple has added a heap of new features to AppleScript now seems a good time to take a look at what new things it can do. I am not going to go over the basics of AppleScript, as this was done in issues 2 to 6 of 1984-Online, and are readily downloadable from 1984-Online‚Äôs web site.
  18.  
  19. New Features
  20. AppleScript is typical of brilliant Apple technology. With (compared to other programming languages) the tiniest amount of practice even non-techie types can create very clever scripts in a very English-like way.. It‚Äôs brilliant, but suffered when Apple lost the plot. Steve Jobs returned, saw it was good, and demanded it be made better. What a guy!
  21.  
  22. So, after languishing in the hall of neglected technologies, AppleScript has been brought back to life with a whole raft of fab new features. Here‚Äôs a summary of them:
  23.  
  24. Clipboard: support for the Clipboard is now included in the ‚ÄòStandard Additions‚Äô file, making at available to all applications.
  25. New Scriptable Control Panels: Control Panels such as Appearance, Apple Menu Options, File Exchange (previously PC Exchange) and the Location Manager are now scriptable, as are the File Sharing, Users and Groups and the Web Sharing control panels.
  26. New Scriptable Extensions: Application Switcher (the thing you see when you ‚Äòtear-off‚Äô the Application menu) and ColorSync. In fact, using AppleScript is the only way you can customise the Application Switcher beyond toggling between an icon-only view and an icon and text view, and it can be made to do some interesting things...
  27. New Scriptable Applications: Sherlock is scriptable. The Apple Help Viewer is also scriptable along with the Desktop Printer Manager and Network Setup.
  28. New Toys: You can now write scripts to choose items from a list, pause scripts for a specified period of time, speak text, mount remote volumes (which is nowhere near as interesting as it sounds), summarise text (like in Sherlock),  and have timed dialogue boxes, which could be incredibly handy for scripts that might run when there‚Äôs nobody around.
  29. PowerPC Native: And about time, too!
  30. Folder Actions: Attach scripts to folders.
  31. Documentation: At last there‚Äôs some genuinely useful online documentation on AppleScript available in the Help Centre. It‚Äôs packed with useful tips, very useful examples and even a few pre-written scripts. It also makes me redundant. Oh dear.
  32.  
  33. Putting This Into Practise
  34. The only real way to learn about something is to do it. So we‚Äôre going to write a script that takes advantage of some of the more useful features -- choosing from lists and timed dialogue boxes, along with speech, which may not be that useful but is a lot of fun.
  35.  
  36. The Script
  37. We‚Äôre going to write a script that displays a list of text-to-speech voices, from which the user can choose a single voice. Then we‚Äôll display a dialogue box where the user can type in some text for the Mac to speak, but they must be quick about it because they‚Äôve only got five seconds or the dialogue disappears and the Mac makes a smart remark.
  38.  
  39. Choosing From Lists
  40. This is probably the most useful addition of all. Included in the Standard Additions scripting addition this features is available in every scriptable application. You can display a list of items and the user can be allowed to select multiple(with the aid of the shift key) or single items which are then passed back into the script as a list variable.
  41.  
  42. Open the Standard Additions dictionary now. To do this:
  43.  
  44. Open the Script Editor application, which is usually located in the AppleScript folder in the Apple Extras folder.
  45. Choose Open Dictionary from the File menu.
  46. Click the ‚ÄúGo to Scripting Additions folder‚Äù button at the bottom of the Open dialogue.
  47. Scroll down the list and choose the Standard Additions file.
  48. In the dictionary window, if you then click on Choose From List, you‚Äôll see the choose from list command in full in the right pane of the window:
  49.  
  50. choose from list: Allows user to select an item from a list of strings
  51.     choose from list  list  -- a list of strings to display (an empty list if no selection)
  52.         [with prompt  string]  -- the prompt to appear at the top of the list selection dialog
  53.         [default items  list]  -- list of strings to initially select
  54.         [OK button name  string]  -- the name of the OK button
  55.         [cancel button name  string]  -- the name of the Cancel button
  56.         [multiple selections allowed  Boolean]  -- Allow multiple items to be selected?
  57.         [empty selection allowed  Boolean]  -- Can the user make no selection and then choose OK?
  58.     Result:   list  -- the list of strings chosen
  59.  
  60. All items enclosed in square brackets are optional.
  61.  
  62. We‚Äôre now going to write the part of the script that gets a list of all available text‚Äìto‚Äìspeech voices. To do this we‚Äôre going to create a list variable containing the names of every file in the Voices folder, which is in your extensions folder. Type this into a new script document :
  63.  
  64. tell application "Finder"
  65.     set myList to the name of every item in folder "Voices" of extensions folder
  66. end tell
  67.  
  68. These three lines need little explanation, to see what happens when this script runs do this:
  69.  
  70. Choose Show Result from the Controls menu.
  71. Click the Run button.
  72.  
  73. You should see the result window looking something like this:
  74.  
  75.  
  76.  
  77. This is the format of a list variable containing all available voices. Lists start and end with curly braces {} with each item separated by commas. We‚Äôve saved this result in a variable called myList. 
  78.  
  79. We then need to show the choose from list dialogue box so the user can choose a voice from the list. 
  80.  
  81. After ‚Äòend tell‚Äô, type this:
  82.  
  83. choose from list myList ¬¨
  84.     with prompt "Choose a voice:" default items {"Fred"} without empty selection allowed
  85.  
  86. This doesn‚Äôt use the full range of options available for the ‚Äòchoose from list‚Äô command, but it will display the variable we created called ‚ÄòmyList‚Äô with a prompt to choose a voice. The default item is set to the voice ‚ÄòFred‚Äô and an item must be selected before the user can proceed. By default, multiple selection is not allowed, which is what we need as we can only speak with one voice at a time.
  87.  
  88. Run the script again to see what happens. You should see a dialogue box.
  89.  
  90. Now we need to react to the user‚Äôs choice from the dialogue box. They can either choose a voice and click OK, or they can click Cancel. We need to analyse what was returned in ‚Äòthe result‚Äô, but it‚Äôs best to save this into our own variable as ‚Äòthe result‚Äô changes with each action we perform. 
  91.  
  92. To save the result into a variable called myResult, type this after the ‚Äòchoose from list‚Äô command:
  93.  
  94. set myResult to the result
  95.  
  96. Now that‚Äôs saved off, it‚Äôs time to make some decisions. If the user clicked the Cancel button the ‚Äòthe result‚Äô will contain a value of false. If they clicked OK then the result will contain a list of choices made. In other words, if they click Cancel we don‚Äôt need to do anything else.
  97.  
  98. Now type this (but don‚Äôt run it yet!):
  99.  
  100. if myResult is not false then
  101.     set myVoice to myResult  as string
  102.  
  103. So if the value contained in myResult is not false then we save myResult into a new string variable called myVoice.
  104.  
  105. Timed Dialogue Boxes
  106. Next we want to display a dialogue box where the user can either type some text to speak and click OK or click Cancel. The intricacies of dialogue boxes were explained in my feature ‚ÄòAppleScript Part 2‚Äô, which appeared in Issue 3 of 1984-Online. The twist with our dialogue box this time is that it can also time out after 5 seconds.
  107.  
  108. Type this (the ¬¨  characters are optional and indicate the continuation of a line. They can be typed in the script editor by pressing option‚Äìreturn.):
  109.  
  110. display dialog ¬¨
  111.         "Type the text to speak (but be quick!):" default answer ¬¨
  112.         "" buttons {"Cancel", " Speak! "} default button 2 with icon note giving up after 5
  113.     set myResult to the result
  114.  
  115. Don‚Äôt run it yet! The dialogue box will look like this:
  116.  
  117.  
  118.  
  119. In detail: The first command will display a dialogue box with a prompt reading  ‚ÄúType the text to speak (but be quick!):‚Äù. Using ‚Äòdefault answer ‚Äú‚Äù‚Äô  puts a blank text-entry box on the dialogue where the user will type their text. There are two buttons called Cancel and Speak! and the default button (the button which is ‚Äòclicked‚Äô when you press Enter) is the second button. We add a pretty icon called note and ‚Äògive up‚Äô after 5 seconds. 
  120.  
  121. Then we set the variable myResult to the result.
  122.  
  123. Speech
  124. Then we must react to the user‚Äôs choices from this dialogue. They can either type something and click the ‚ÄòSpeak!‚Äô button,  not type anything and click the ‚ÄòSpeak‚Äô button or click Cancel.
  125.  
  126. So, firstly we only want to do something if the user clicked Speak. 
  127.  
  128. Type this:
  129.  
  130. if the button returned of myResult is "Speak!" then
  131.  
  132. Self explanatory?
  133.  
  134. After that, type this:
  135.  
  136. if the text returned of myResult is "" then
  137.     say "You didn't type anything!" using myVoice
  138.  
  139. So if the ‚Äòtext returned‚Äô is ‚Äú‚Äù (meaning nothing was typed) then we make the computer say ‚ÄúYou didn‚Äôt type anything!‚Äù using the voice chosen from the ‚Äòchoose from list‚Äô dialogue.
  140.  
  141. After that, type this:
  142.  
  143. else
  144.     set myWords to the text returned of myResult
  145.     say myWords using myVoice
  146. end if
  147.  
  148. So if the user did type something to speak then we save it into a variable called myWords and say it using myVoice -- the voice chosen from the ‚Äòchoose from list‚Äô dialogue.
  149.  
  150. Now the only situation left to deal with is if the dialogue box timed out after five seconds. 
  151.  
  152. Type this:
  153.  
  154. else if myResult is gave up then
  155.         say "You'll have to be quicker than that!" using myVoice
  156.     end if
  157. end if
  158.  
  159. Translated this means ‚Äòelse‚Äô (this is the else to the ‚Äòif‚Äô questioning whether the button clicked was ‚ÄòSpeak!‚Äô) if ‚Äògave up‚Äô in myResult is true, then say ‚ÄúYou‚Äôll have to be quicker than that!‚Äù using the voice previously chosen. Then we end the ‚Äòelse if‚Äô and end the first if which checked whether the Speak button was chosen.
  160.  
  161. Testing
  162. Now you can run the script. Try it in the following combinations to make sure it all works:
  163.  
  164. Click Cancel when asked to choice a voice.
  165.     The script should finish.
  166. Choose a voice, click OK, then click Cancel when asked to type some text to speak.
  167.     The script should finish.
  168. Choose a voice, click OK, then quickly type some text and click Speak.
  169.     The text should be spoken in the voice you chose.
  170. Choose a voice, click OK, then click Speak without typing anything.
  171.     You should be told that you didn‚Äôt type anything.
  172. Choose a voice, click OK and wait to be told off.
  173.     You should be told that you have to be quicker than you were.
  174.  
  175. Here‚Äôs a summary of technical terms used in this feature:
  176.  
  177. TECHNO–BABBLE
  178. Dialog(ue) Box
  179. A window that appears on screen when the Mac needs to tell you some important information, or needs to get some information from you. Dialogue boxes are achieved by using the ‚Äòdisplay dialog‚Äô command.
  180.  
  181. Variables
  182. A named container of information. To create a variable, just specify its contents. Example: set myVariable to ‚ÄúJoe Bloggs‚Äù, creates a variable called myVariable with the text ‚ÄúJoe Bloggs‚Äù as its contents.
  183.  
  184. Dictionaries
  185. A dictionary defines words (commands) that can be used in scripts. Dictionaries are found in a scriptable application‚Äôs file and in Scripting Additions. Scripting Additions can be found, oddly enough, in the Scripting Additions folder in your System Folder. To open a dictionary choose Open Dictionary from the File menu in the Script Editor.
  186.  
  187. The Result
  188. An AppleScript-defined variable (i.e. you can‚Äôt define this as a variable yourself) that contains the result, if any, of the last command which would have returned a result to the script, like the button clicked or text entered. To see the result in the Script Editor, choose Show Result from the Controls menu.
  189.  
  190. Conditions
  191. Conditions are a way of making decisions in scripts, and controlling which actions are necessary. Conditions use the if‚Ķ else‚Ķ end if structure.
  192.  
  193. Ô£øSteve Harris
  194. <steve_harris@1984-online.com>
  195.  
  196.  ¬†
  197.   
  198.  
  199.  
  200.